//请编写一个操作对象方法和属性的函数实现以下功能
//1.当对象字符串属性有空格时就去掉空格后输出。√
//2.当遇到对象函数时就执行，其他数据类型的属性律直接输出 √
//3.只有对象中包含allowoutput属性时，才允许输出。√
//4.函数接收到外部传入的null, undefined,{}时， 直接输出不是一个合法的对 象。 √
// 考核点: 1.考核对类型守卫的熟练运用程度2.静态方法

//类型断言、类型守卫、自定义守卫+多态+类\6-6 [(TS类型守卫综合运用]  会进行文件夹创建 以及文件创建
// 
interface TestInter {
  username: string,
  age: number,
  eat(): void,
  noallowinput: 1
}

class StringUtil {
  public static replaceBlank(srt: string) {
    return srt.replace(/\s+/g, '')
  }
}

const tetsObj: TestInter = {
  username: 'sel  fs um mer',
  age: 18,
  eat() {
    console.log(StringUtil.replaceBlank(this.username))
  },
  noallowinput: 1
};

function test(data: any) {
  if (data == null) return console.log('传入值为', data);
  if (data && Object.keys(data).length === 0) return console.log(data, '不是合法对象');

  for (const key in data) {
    'allowoutput' === key && console.log(data[key]);
    if (typeof data[key] === 'function') data[key]()
    if (typeof data[key] === 'string') console.log(StringUtil.replaceBlank(data[key]));
  }


}

test(tetsObj)


